package com.kalvan.core.mq.consumer;


import lombok.extern.slf4j.Slf4j;


/**
 * 通知商户详细处理
 *
 * @author chenliang
 */
@Slf4j
public class TransNotifyDsCmd implements Runnable {
    /**
     * 消息json格式
     */
    String json;
//    TransNotify transNotify;

    public TransNotifyDsCmd(String json) {
        this.json = json;
    }

    @Override
    public void run() {
        log.info("线程消费数据{}", json);
        try {
//            1.将json 转换为消息对象,定义在commons-notify 项目下,通知信息避免去查数据库在产生消息时把信息都给传
//            transNotify = JSONObject.parseObject(json, TransNotify.class);
//            2.检查通知地址不合法
//            if (HttpUrlUtils.isUrl(transNotify.getNotifyUrl())) {
//                sendNotifyResult(NotifyStateEnum.NOTIFY_URL_ERROR.state());
//                return;
//            }
//            //3. TODO redis获取黑名单地址检查
//            if (false) {
//                sendNotifyResult(NotifyStateEnum.NOTIFY_BLACKLIST.state());
//                return;
//            }
//            //4.TODO 将数据统一加密签名处理后用http工具发送（设置连接超时时间为3秒,读超时时间为5秒）
//            RequestClient.sendNotify("url", "msg");
//            //5.发送交易类型和交易流水号给mq,让交易消费消息更新通知状态为成功
//            sendNotifyResult(NotifyStateEnum.NOTIFY_SUCCESS.state());
        } catch (Throwable t) {
            log.error("notify fail", t);
            fail();
        }
    }

    /**
     * 通知失败处理
     * 判断失败次数，是否拉入黑名单，按日接入黑名单，存redis
     */
    private void fail() {
//        TransNotifyResult result = new TransNotifyResult();
//        result.setTransId(transNotify.getTransId());
//        result.setTransType(transNotify.getTransType());
//        //TODO 判断重试次数,如果达到上限则直接结束
//        if (false) {
//            sendNotifyResult(NotifyStateEnum.NOTIFY_FAIL.state());
//        }
//        //TODO 如果错误次数达到上限拉入黑名单并直接结束
//        if (false) {
//            sendNotifyResult(NotifyStateEnum.NOTIFY_BLACKLIST.state());
//        }
//        //TODO 其它情况继续重试
    }

    /**
     * 通知处理结果，处理完后再通知
     */
    private void sendNotifyResult(Integer notifyState) {
//        TransNotifyResult result = new TransNotifyResult();
//        result.setTransId(transNotify.getTransId());
//        result.setTransType(transNotify.getTransType());
//        result.setNotifyState(notifyState);
//        MqUtil.getProducer().sendAsynMessage(MqTopicEnum.TRADE_NOTIFY_RESULT.topic(), MqTopicEnum.TRADE_NOTIFY_RESULT.tag(),
//                transNotify.getTransId(), JSONObject.toJSONString(result));
    }

}
